package unidades;

import varios.Posicion;
import varios.Rectangulo;
import interfaces.Atacante;
import interfaces.Defensor;
import interfaces.Posicionable;

public abstract class Persona implements Defensor, Atacante, Posicionable {

	private int id;
	private int energia;
	private Posicion posicion;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getEnergia() {
		return energia;
	}

	public void setEnergia(int energia) {
		this.energia = energia;
	}

	public Posicion getPosicion() {
		return posicion;
	}

	public void setPosicion(Posicion posicion) {
		this.posicion = posicion;
	}

	public Rectangulo getSize() {
		return new Rectangulo(this.getPosicion(), 1, 1);
	}

	public boolean ocupa(Posicion p) {
		return p.equals(this.getPosicion());
	}

	public void atacarA(Defensor d) {
		d.teAtaca(this);

	}

	public abstract int cantDanio();

	public void teAtaca(Atacante a) {
		this.setEnergia(this.getEnergia() - a.cantDanio());
	}

	public boolean puedeAtacar(Defensor d) {
		return this.radioDeAtaque().ocupa(d.getPosicion());
	}

	private Rectangulo radioDeAtaque() {
		return new Rectangulo(this.getPosicion(), this.rangoAtaque(),
				this.rangoAtaque());
	}

	public int rangoAtaque() {
		return 1;
	}

}
